/**
 * 减法运算子类（确保结果非负，兼容 Java 21 以下版本）
 */
public class SubtractOperation2 extends BinaryOperation2 {

    /**
     * 默认构造方法：生成随机减法算式（保证结果非负）
     * 核心：所有参数计算直接写在 super() 中，无任何前置代码
     */
    public SubtractOperation2() {
        // 确保被减数大于等于减数且结果不超过100
        // 由于减法结果不超过被减数，而被减数最大为99，所以结果自然不会超过100
        int left = (int) (Math.random() * 100);
        int right = (int) (Math.random() * (left + 1));
        super(left, right, '-');
    }

    /**
     * 带参数的构造方法：手动指定操作数
     */
    public SubtractOperation2(int leftOperand, int rightOperand) {
        // 确保被减数大于等于减数且结果不超过100
        // 由于减法结果不超过被减数，确保被减数不超过100即可
        leftOperand = Math.min(leftOperand, 100);
        int left = Math.max(leftOperand, rightOperand);
        int right = Math.min(leftOperand, rightOperand);
        super(left, right, '-');
    }

    /**
     * 计算减法结果，确保非负（双重保险）
     * 即使 right 偶尔大于 left，也会返回 0
     */
    @Override
    protected int calculate() {
        return Math.max(0, leftOperand - rightOperand);
    }

    @Override
    public boolean checkingCalculation() {
        int correctResult = Math.max(0, leftOperand - rightOperand);
        return getValue() == correctResult;
    }

    @Override
    public String toString() {
        return leftOperand + " " + operator + " " + rightOperand + " = " + getValue();
    }
}